package com.txhy.certificatechain.application;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import com.baidu.ocr.sdk.OCR;
import com.baidu.ocr.sdk.OnResultListener;
import com.baidu.ocr.sdk.exception.OCRError;
import com.baidu.ocr.sdk.model.AccessToken;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheEntity;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.cookie.CookieJarImpl;
import com.lzy.okgo.cookie.store.SPCookieStore;
import com.lzy.okgo.interceptor.HttpLoggingInterceptor;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;

import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;

import okhttp3.OkHttpClient;

/*
 * -----------------------------------------------------------------
 * Copyright (C) 2018-2030, by your company, All rights reserved.
 * -----------------------------------------------------------------
 * 文    件: App.java
 * 作    者: 侯建军
 * 版    权: 1.0.0
 * 描    述: 应用全局配置
 * 创建时间: 2018/9/19 15:42
 * 更新时间：2018/9/19 15:42
 * -----------------------------------------------------------------
 * 2018/9/19 15:42: 创建 App.java (侯建军);
 * -----------------------------------------------------------------
 */
public class App extends Application {
    //Activity集合
    public static List<Activity> activities = new LinkedList<>();
    //上下文对象
    private static Context mContext;
    //    public static List<LivenessTypeEnum> livenessList = new ArrayList<LivenessTypeEnum>();
//    public static boolean isLivenessRandom = false;
//
//    // 为了apiKey,secretKey为您调用百度人脸在线接口的，如注册，比对等。
//    // 为了的安全，建议放在您的服务端，端把人脸传给服务器，在服务端端
//    // license为调用sdk的人脸检测功能使用，人脸识别 = 人脸检测（sdk功能）  + 人脸比对（服务端api）
//    public static String apiKey = "TzMrQ6tZwEnGnb9xXf2sWp78";
//    public static String secretKey = "k6jLie6SntxrcGmKztUPMAQ6dj8MqyQB";
//    public static String licenseID = "zhengyoubi-face-android";
//    public static String licenseFileName = "idl-license.face-android";
//
    //令牌获取
    private boolean hasGotToken = false;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this.getApplicationContext();    //获取应上下文
        initOkGo();                                 //初始化okGO
        initAutoLayout();                           //初始化自动布局
        initAccessToken();                          //Ocr识别，使用license
        initLogger();                               //初始化日志

        //友盟
//        initYoumeng();
        //百度人脸识别
//        initBaiDuFace();
    }
//    public void initBaiDuFace() {
//        FaceSDKManager.getInstance().initialize(this, licenseID,licenseFileName);
//        FaceConfig config = FaceSDKManager.getInstance().getFaceConfig();
//        // SDK初始化已经设置完默认参数（推荐参数），您也根据实际需求进行数值调整
//        config.setLivenessTypeList(livenessList);
//        config.setLivenessRandom(isLivenessRandom);
//        config.setBlurnessValue(FaceEnvironment.VALUE_BLURNESS);
//        config.setBrightnessValue(FaceEnvironment.VALUE_BRIGHTNESS);
//        config.setCropFaceValue(FaceEnvironment.VALUE_CROP_FACE_SIZE);
//        config.setHeadPitchValue(FaceEnvironment.VALUE_HEAD_PITCH);
//        config.setHeadRollValue(FaceEnvironment.VALUE_HEAD_ROLL);
//        config.setHeadYawValue(FaceEnvironment.VALUE_HEAD_YAW);
//        config.setMinFaceSize(FaceEnvironment.VALUE_MIN_FACE_SIZE);
//        config.setNotFaceValue(FaceEnvironment.VALUE_NOT_FACE_THRESHOLD);
//        config.setOcclusionValue(FaceEnvironment.VALUE_OCCLUSION);
//        config.setCheckFaceQuality(true);
//        config.setFaceDecodeNumberOfThreads(2);
//        FaceSDKManager.getInstance().setFaceConfig(config);
//    }
//    private void initYoumeng() {
//        super.onCreate();
//        UMConfigure.init(this,"5b16042cf29d98173300003c"
//                ,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
//        PlatformConfig.setWeixin("wx0a86ccb10ecb27c7", "628a9387d422ed90ecb5f260e0b1f926");
//        PlatformConfig.setSinaWeibo("1843866649", "4919fbe6653b76a831068df3a1bbcc6c","http://sns.whalecloud.com");
//        PlatformConfig.setQQZone("1106877377", "M3M4moi8B9Dmfch7");
//        UMConfigure.setLogEnabled(true);
//
//    }

    /**
     * 配置AutoLayout
     */
    private void initAutoLayout() {
        //默认使用的高度是设备的可用高度，也就是不包括状态栏和底部的操作栏的，以下配置可以拿到设备的物理高度进行百分比
//        AutoLayoutConifg.getInstance().useDeviceSize();
    }

    /**
     * 初始化okgo
     */
    private void initOkGo() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        //使用sp保持cookie，如果cookie不过期，则一直有效
        builder.cookieJar(new CookieJarImpl(new SPCookieStore(this)));
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("OkGo");
        loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY);
        //log颜色级别，决定了log在控制台显示的颜色
        loggingInterceptor.setColorLevel(Level.INFO);
        builder.addInterceptor(loggingInterceptor);
        builder.readTimeout(10000, TimeUnit.MILLISECONDS);
        builder.writeTimeout(10000, TimeUnit.MILLISECONDS);
        builder.connectTimeout(10000, TimeUnit.MILLISECONDS);
//        builder.addInterceptor(new TokenInterceptor());
        //初始化OkGo
        OkGo.getInstance()
                .init(this)
                .setOkHttpClient(builder.build()) //设置OkHttpClient，不设置将使用默认的
                .setCacheMode(CacheMode.NO_CACHE)
                .setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE)
                .setRetryCount(3);
    }

    public static Context getmContext() {
        return mContext;
    }

    /**
     * 退出程序
     */
    public static void exit() {
        for (Activity activity : activities) {
            activity.finish();
        }
    }

    private boolean checkTokenStatus() {
        if (!hasGotToken) {
            Toast.makeText(getApplicationContext(), "token还未成功获取", Toast.LENGTH_LONG).show();
        }
        return hasGotToken;
    }

    /**
     * 初始化百度ocr
     */
    private void initAccessTokenWithAkSk() {
        /**
         * 用明文ak，sk初始化
         */
        OCR.getInstance(this).initAccessTokenWithAkSk(
                new OnResultListener<AccessToken>() {
                    @Override
                    public void onResult(AccessToken result) {
                        // 本地自动识别需要初始化
//                        initLicense();
                        Log.d("MainActivity", "onResult: " + result.toString());
                    }

                    @Override
                    public void onError(OCRError error) {
                        error.printStackTrace();
                        Log.e("MainActivity", "onError: " + error.getMessage());
                    }
                }, getApplicationContext(),
                // 需要自己配置 https://console.bce.baidu.com
                "MUwLqftifFp66e3xV313Mosk",
                // 需要自己配置 https://console.bce.baidu.com
                "s5Kf2Osv5bA0peho1IFOj7GQcvDOy7Tu");
    }

    /**
     * 以license文件方式初始化
     */
    private void initAccessToken() {
        OCR.getInstance(this).initAccessToken(new OnResultListener<AccessToken>() {
            @Override
            public void onResult(AccessToken accessToken) {
                String token = accessToken.getAccessToken();
                hasGotToken = true;
            }

            @Override
            public void onError(OCRError error) {
                error.printStackTrace();
            }
        }, getApplicationContext());
    }

    /**
     * 初始化Logger
     */
    public void initLogger() {
        //初始化日志框架
//        FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
//                .showThreadInfo(false)      //（可选）是否显示线程信息。 默认值为true
//                .methodCount(2)               // （可选）要显示的方法行数。 默认2
//                .methodOffset(7)               // （可选）设置调用堆栈的函数偏移值，0的话则从打印该Log的函数开始输出堆栈信息，默认是0
//                //                .logStrategy(customLog)  //（可选）更改要打印的日志策略。 默认LogCat
//                .tag("MyTAG")                  //（可选）每个日志的全局标记。 默认PRETTY_LOGGER（如上图）
//                .build();
//        Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
        Logger.addLogAdapter(new AndroidLogAdapter());
    }
}